package com.gc.common.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * @Description: 生成ID工具类
 * @author: huruiyan
 * @date: 2019/11/01 12:18
 */
public class IdUtils {

    /**
     * 以毫微秒做基础计数, 返回唯一有序增长ID
     * <pre>System.nanoTime()</pre>
     * <pre>
     * 线程数量: 100
     * 执行次数: 1000
     * 平均耗时: 222 ms
     * 数组长度: 100000
     * Map Size: 100000
     * </pre>
     *
     * @return ID长度32位
     */
    public static String getRandomNum() {
        return MathUtils.makeUpNewData(Thread.currentThread().hashCode() + "", 3) + MathUtils.randomDigitNumber(7);//随机10位数
    }

    /**
     * @return
     * @title uuid
     */
    public static String getUUIDKey() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * @return
     * @title 获取数据ID
     */
    public static Long getPrimaryKey() {
        return IdFactory.getID();
    }


    /**
     * 获取订单号(20位)
     *
     * @param userId 年月日时分秒微秒(17)+随机码(1)+用户ID(倒数一位)+随机码(1)
     */
    public static String getOrderNum(Long userId) {
        Random random = new Random(System.currentTimeMillis());
        String rand = (Math.abs(random.nextInt(10))) + "";
        String rand2 = (Math.abs(random.nextInt(10))) + "";
        String time = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
        String userIdSuf = userId.toString().substring(userId.toString().length() - 1);
        String orderId = time + rand + userIdSuf + rand2;
        return orderId;
    }

}
